(function() {
  var get_permission;

  get_permission = function() {
    var permissions;
    permissions = [];
    $('table#permission tbody tr').not('#header').each(function() {
      var id, item, _i, _len, _ref, _results;
      item = {
        href: $(this).data('href'),
        title: $(this).data('label'),
        header: $(this).data('header'),
        permission: {}
      };
      if ($(this).find('.checkbox#access').checkbox('is checked')) {
        permissions.push(item);
        item.permission.access = true;
        _ref = ['new', 'edit', 'delete', 'disable', 'check', 'import', 'export', 'batch', 'recharge'];
        _results = [];
        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
          id = _ref[_i];
          if ($(this).find('.checkbox#' + id).checkbox('is checked')) {
            _results.push(item.permission[id] = true);
          } else {
            _results.push(void 0);
          }
        }
        return _results;
      }
    });
    return JSON.stringify(permissions);
  };

  $(function() {
    var form, item, k, permission, tr, trs, _i, _j, _len, _len1, _ref;
    form = $('form.main');
    form.form({
      inline: true,
      fields: {
        name: 'empty'
      }
    });
    form.submit(function(evt) {
      if (!$(this).form('is valid')) {
        evt.preventDefault();
        return false;
      }
      if (!form.find('.checkbox#root').checkbox('is checked')) {
        return form.find('input[name=permission]').val(get_permission());
      } else {
        return form.find('input[name=permission]').val("[]");
      }
    });
    if (form.find('.toggle#root').checkbox('is checked')) {
      form.find('table#permission').hide();
    } else {
      form.find('table#permission').show();
    }
    form.find('.toggle#root').checkbox({
      onChecked: function() {
        return $('table#permission').hide();
      },
      onUnchecked: function() {
        return $('table#permission').show();
      }
    });
    trs = form.find('table#permission').find('tr').not('#header').each(function() {
      return $(this).find('td').not(':first').addClass('disabled').find('*').addClass('disabled');
    });
    form.find('table#permission tbody .checkbox#access').each(function() {
      return $(this).checkbox({
        onChecked: function() {
          return $(this).parents('tr').find('td').not(':first').removeClass('disabled').find('*').removeClass('disabled');
        },
        onUnchecked: function() {
          return $(this).parents('tr').find('td').not(':first').addClass('disabled').find('*').addClass('disabled');
        }
      });
    });
    permission = form.form('get value', 'permission');
    if (permission) {
      permission = JSON.parse(permission);
      for (_i = 0, _len = permission.length; _i < _len; _i++) {
        item = permission[_i];
        if (!item.permission.access) {
          continue;
        }
        tr = $("table#permission tbody tr[data-href='" + item.href + "']");
        tr.find('td').removeClass('disabled').find('*').removeClass('disabled');
        tr.find('td .checkbox#access').checkbox('set checked');
        _ref = ['new', 'edit', 'delete', 'disable', 'check', 'import', 'export', 'batch', 'recharge'];
        for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
          k = _ref[_j];
          if (item.permission[k]) {
            tr.find("td .checkbox#" + k).checkbox('set checked');
          }
        }
      }
    }
    form.find('table#permission tbody .icon#select_all').click(function() {
      return $(this).parents('td').siblings().find('.checkbox').checkbox('set checked');
    });
    form.find('table#permission tbody .icon#unselect_all').click(function() {
      return $(this).parents('td').siblings().find('.checkbox').not('#access').checkbox('set unchecked');
    });
    form.find('i#all_access').click(function() {
      var box;
      if ($(this).data('has_clicked')) {
        tr = $(this).parents('tr');
        while (true) {
          tr = $(tr).next();
          box = $(tr).find('.checkbox:first');
          if (box.length === 0) {
            break;
          }
          $(box).checkbox('uncheck');
        }
        return $(this).data('has_clicked', false);
      } else {
        tr = $(this).parents('tr');
        while (true) {
          tr = $(tr).next();
          box = $(tr).find('.checkbox:first');
          if (box.length === 0) {
            break;
          }
          $(box).checkbox('check');
        }
        return $(this).data('has_clicked', true);
      }
    });
    return form.find('a#all_vertical').click(function(evt) {
      var box, _results, _results1;
      evt.preventDefault();
      if ($(this).data('has_clicked')) {
        $(this).data('has_clicked', false);
        tr = $(this).parents('tr');
        _results = [];
        while (true) {
          tr = $(tr).next();
          box = $(tr).find(".checkbox:eq(" + ($(this).data('eq')) + ")");
          if (box.length === 0) {
            break;
          }
          if (!$(box).hasClass('disabled')) {
            _results.push($(box).checkbox('uncheck'));
          } else {
            _results.push(void 0);
          }
        }
        return _results;
      } else {
        $(this).data('has_clicked', true);
        tr = $(this).parents('tr');
        _results1 = [];
        while (true) {
          tr = $(tr).next();
          box = $(tr).find(".checkbox:eq(" + ($(this).data('eq')) + ")");
          if (box.length === 0) {
            break;
          }
          if (!$(box).hasClass('disabled')) {
            _results1.push($(box).checkbox('check'));
          } else {
            _results1.push(void 0);
          }
        }
        return _results1;
      }
    });
  });

}).call(this);
